package com.hyb.algorithm.data.struct.str;

/**
 * @author: ybhu
 * @create: 2021/09/21 15:29
 *
 * 709. 转换成小写字母
 * https://leetcode-cn.com/problems/to-lower-case/
 *
 * 通过 ASCII 码表操作字符串即可。
 * a-z：97-122
 * A-Z：65-90
 * 0-9：48-57
 *
 *
 * 用位运算的技巧：
 *
 * 大写变小写、小写变大写：字符 ^= 32;
 * 大写变小写、小写变小写：字符 |= 32;
 * 大写变大写、小写变大写：字符 &= 33;
 * SCII码表中大写的A是65，小写的a是97，它们的差是32
 * 65 | 32 转为二进制（按8位来算）可以得到 0100 0001 | 0010 0000 = 0110 0001 = 97 = a
 *
 * 作者：yijiaoqian
 * 链接：https://leetcode-cn.com/problems/to-lower-case/solution/709zhuan-huan-cheng-xiao-xie-zi-mu-java-by-yijiaoq/
 * 来源：力扣（LeetCode）
 * 著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。
 *
 */
public class ToLowerCase {

    public String toLowerCase(String s) {
        if(s==null||s.length()<=0){
            return "";
        }
        //循环遍历 判断是否大写字母
        StringBuilder sb=new StringBuilder();
        int n=s.length();
        for(int i=0;i<n;i++){
            char ch=s.charAt(i);
            if(ch>='A'&&ch<='Z'){
                sb.append((char)(ch+32));
            }else{
                sb.append(ch);
            }
        }

        return sb.toString();
    }
}
